package com.lsl.singleton_pattern.example.lazySingleton1;

/**
 * @author Zed
 * @description
 * @date 2022/12/14 22:26
 */
// 该懒汉式单例类在getInstance()方法前面增加了关键字synchronized进行线程锁，以处理多个线程同时访问的问题。
public class LazySingleton {
    private static LazySingleton instance = null;

    private LazySingleton() {
    }

    //懒汉式单例在第一次调用getInstance()方法时实例化，在类加载时并不自行实例化，这种技术又称为延迟加载(Lazy Load)技术
    //即需要的时候再加载实例，为了避免多个线程同时调用getInstance()方法，我们可以使用关键字synchronized
    synchronized public static LazySingleton getInstance() {
        if (instance == null) {
            instance = new LazySingleton();
        }
        return instance;
    }
    //上述代码虽然解决了线程安全问题，但是每次调用getInstance()时都需要进行线程锁定判断，在多线程高并发访问环境中，将会导致系统性能大大降低。
    //我们无须对整个getInstance()方法进行锁定，只需对其中的代码"instance = new LazySingleton();"进行锁定即可
}